<html>
<head>
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script src="http://www.google.com/jsapi?autoload={'modules':[{'name':'visualization','version':'1','packages':['controls', 'charteditor']}]}"></script>
<script src="http://jquery-csv.googlecode.com/git/src/jquery.csv.js"></script>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script>
$(function() {
  google.load("visualization", "1", {packages:["corechart"]});

    var csv = $('#textInput').val();
    var data = $.csv.toArrays(csv, {
        onParseValue: $.csv.hooks.castToScalar
    });

    // Convert data for bar chart (averaging all digits)
    var timeData = {};  // type -> table
    var funcRowMap;

    for (var i = 1; i < data.length; i++) {
      var type = data[i][0];
      var func = data[i][1];
      var digit = data[i][2];
      var time = data[i][3];
      if (timeData[type] == null) {
        timeData[type] = [["Function", "Time (ns)"/*, { role: "style" }*/]];
        if (digit != 0)
          funcRowMap = {};
      }

      var table = timeData[type];
      
      if (digit != 0) {
        if (funcRowMap[func] == null)
          funcRowMap[func] = table.push([func, []/*, defaultColors[table.length - 1]*/]) - 1;
        
        table[funcRowMap[func]][1].push(time);
      }
      else
        table.push([func, time]);
    }

    // averaging
    for (var type in timeData) {
      var table = timeData[type];
      for (var i = 0; i < table.length; i++) {
        if (typeof(table[i][1]) == "object") {
          var sum = 0;
          for (var j = 0; j < table[i][1].length; j++)
            sum += table[i][1][j];
          table[i][1] = sum / table[i][1].length;
        }
      }
    }

    // Convert data for drawing line chart per sequential digit
    var timeDigitData = {}; // type -> table
    var funcColumnMap;

    for (var i = 1; i < data.length; i++) {
      var type = data[i][0];
      var func = data[i][1];
      var digit = data[i][2];
      var time = data[i][3];

      if (digit == 0)
        continue;

      if (timeDigitData[type] == null) {
        timeDigitData[type] = [["Digit"]];
        funcColumnMap = {};
      }

      var table = timeDigitData[type];

      if (funcColumnMap[func] == null)
        funcColumnMap[func] = table[0].push(func) - 1;

      var row;
      for (row = 1; row < table.length; row++)
        if (table[row][0] == digit)
          break;

      if (row == table.length)
        table.push([digit]);

    table[row][funcColumnMap[func]] = time;
  }

  for (var type in timeData) {
    $("#main").append(
      $("<a>", {name: type}),
      $("<h2>", {style: "padding-top: 70px; margin-top: -70px;"}).append(type)
    );

    $("#section").append($("<li>").append($("<a>", {href: "#" + type}).append(type)));

    drawTable(type, timeData[type]);
    drawBarChart(type, timeData[type]);
    if (timeDigitData[type] != null)
      drawDigitChart(type, timeDigitData[type]);
  }

  // Image download button
  $(".chart").each(function() {
    var chart = $(this);
    var d = $("#downloadDD").clone().css("display", "");
    $('li a', d).each(function() {
          $(this).click(function() {
              var svg = chart[0].getElementsByTagName('svg')[0].parentNode.innerHTML;
              svg=sanitize(svg);
              $('#imageFilename').val($("#title").html() + "_" + chart.data("filename"));
              $('#imageGetFormTYPE').val($(this).attr('dltype'));
              $('#imageGetFormSVG').val(svg);
              $('#imageGetForm').submit();
          });
      });   
    $(this).after(d);
  });

  // Show markdown button
  $(".tablechart").each(function() {
    var chart = $(this);
    var type = chart.data("type");
    var d = $("#showMD").clone().css("display", "");
    $('.collapse', d).first().attr("id", "tableMD" + type);
    $('button', d).first().attr("data-target","#tableMD" + type).click(function() {
      var markdown = DataTableToMarkdown(chart.data("data"));
      $('textarea', d).val(markdown).attr("rows", markdown.split("\n").length);
    });
    $(this).after(d);
  });

  // Add configurations
  var thisConfig = "corei7920@2.67_win64_vc2013";
  var configurations = ["corei7920@2.67_cygwin32_gcc4.8","corei7920@2.67_cygwin64_gcc4.8","corei7920@2.67_win32_vc2013","corei7920@2.67_win64_vc2013"];

  for (var i in configurations) {
    var c = configurations[i];
    $("#configuration").append($("<li>", {class : (c == thisConfig ? "active" : "")}).append($("<a>", {href: c + ".html"}).append(c)));
  }
});

function drawTable(type, timeData) {
  var data = google.visualization.arrayToDataTable(timeData);
    data.addColumn('number', 'Speedup');
    data.sort([{ column: 1, desc: true }]);
    var formatter1 = new google.visualization.NumberFormat({ fractionDigits: 3 });
    formatter1.format(data, 1);

    var div = document.createElement("div");
    div.className = "tablechart";
    $(div).data("type", type).data("data", data);
    $("#main").append(div);
    var table = new google.visualization.Table(div);
    redrawTable(0);
    table.setSelection([{ row: 0, column: null}]);

    function redrawTable(selectedRow) {
      // Compute relative time using the first row as basis
      var basis = data.getValue(selectedRow, 1);
      for (var rowIndex = 0; rowIndex < data.getNumberOfRows(); rowIndex++)
        data.setValue(rowIndex, 2, basis / data.getValue(rowIndex, 1));

      var formatter = new google.visualization.NumberFormat({suffix: 'x'});
      formatter.format(data, 2); // Apply formatter to second column

      table.draw(data);
    }

    google.visualization.events.addListener(table, 'select',
    function() {
      var selection = table.getSelection();
      if (selection.length > 0) {
        var item = selection[0];
        if (item.row != null) {
          redrawTable(item.row);

          // Also update markdown
          var markdown = DataTableToMarkdown(data);
          $('textarea', $("#tableMD" + type)).val(markdown);
        }
      }
    });
}

function drawBarChart(type, timeData) {
  var defaultColors = ["#3366cc","#dc3912","#ff9900","#109618","#990099","#0099c6","#dd4477","#66aa00","#b82e2e","#316395","#994499","#22aa99","#aaaa11","#6633cc","#e67300","#8b0707","#651067","#329262","#5574a6","#3b3eac","#b77322","#16d620","#b91383","#f4359e","#9c5935","#a9c413","#2a778d","#668d1c","#bea413","#0c5922","#743411"];

  var data = google.visualization.arrayToDataTable(timeData);
  data.addColumn({ type: "string", role: "style" })
  for (var rowIndex = 0; rowIndex < data.getNumberOfRows(); rowIndex++)
    data.setValue(rowIndex, 2, defaultColors[rowIndex]);

  data.sort([{ column: 1, desc: true }]);
  var options = { 
    title: type,
    chartArea: {'width': '70%', 'height': '70%'},
    width: 800,
    height: 300,
    legend: { position: "none" },
    hAxis: { title: "Time (ns)" }
  };
  var div = document.createElement("div");
  div.className = "chart";
  $(div).data("filename", type + "_time");
  $("#main").append(div);
  var chart = new google.visualization.BarChart(div);

  chart.draw(data, options);
}

function drawDigitChart(type, timeDigitData) {
  var data = google.visualization.arrayToDataTable(timeDigitData);

  var options = { 
    title: type,
    chartArea: {'width': '70%', 'height': '80%'},
    hAxis: {
      title: "Digit",
      gridlines: { count: timeDigitData.length - 1 },
      maxAlternation: 1,
      minTextSpacing: 0
    },
    vAxis: {
      title: "Time (ns) in log scale",
      logScale: true,
      minorGridlines: { count: 10 },
      baseline: 0
    },
    width: 800,
    height: 600
  };
  var div = document.createElement("div");
  div.className = "chart";
  $(div).data("filename", type + "_timedigit");
  $("#main").append(div);
  var chart = new google.visualization.LineChart(div);

  chart.draw(data, options);
}

// http://jsfiddle.net/P6XXM/
function sanitize(svg) {
    svg = svg
        .replace(/\<svg/,'<svg xmlns="http://www.w3.org/2000/svg" version="1.1"')
        .replace(/zIndex="[^"]+"/g, '')
        .replace(/isShadow="[^"]+"/g, '')
        .replace(/symbolName="[^"]+"/g, '')
        .replace(/jQuery[0-9]+="[^"]+"/g, '')
        .replace(/isTracker="[^"]+"/g, '')
        .replace(/url\([^#]+#/g, 'url(#')
        .replace('<svg xmlns:xlink="http://www.w3.org/1999/xlink" ', '<svg ')
        .replace(/ href=/g, ' xlink:href=')
    /*.replace(/preserveAspectRatio="none">/g, 'preserveAspectRatio="none"/>')*/
    /* This fails in IE < 8
    .replace(/([0-9]+)\.([0-9]+)/g, function(s1, s2, s3) { // round off to save weight
    return s2 +'.'+ s3[0];
    })*/

    // IE specific
        .replace(/id=([^" >]+)/g, 'id="$1"')
        .replace(/class=([^" ]+)/g, 'class="$1"')
        .replace(/ transform /g, ' ')
        .replace(/:(path|rect)/g, '$1')
        .replace(/<img ([^>]*)>/gi, '<image $1 />')
        .replace(/<\/image>/g, '') // remove closing tags for images as they'll never have any content
        .replace(/<image ([^>]*)([^\/])>/gi, '<image $1$2 />') // closes image tags for firefox
        .replace(/width=(\d+)/g, 'width="$1"')
        .replace(/height=(\d+)/g, 'height="$1"')
        .replace(/hc-svg-href="/g, 'xlink:href="')
        .replace(/style="([^"]+)"/g, function (s) {
            return s.toLowerCase();
        });

    // IE9 beta bugs with innerHTML. Test again with final IE9.
    svg = svg.replace(/(url\(#highcharts-[0-9]+)&quot;/g, '$1')
        .replace(/&quot;/g, "'");
    if (svg.match(/ xmlns="/g).length == 2) {
        svg = svg.replace(/xmlns="[^"]+"/, '');
    }

    return svg;
}

function DataTableToMarkdown(dataTable) {
  var s = "|";
  var columnCount = dataTable.getNumberOfColumns();
  var rowCount = dataTable.getNumberOfRows();

  // compute columnWidths & padding
  var columnWidths = new Array();
  var columnPadRight = new Array();
  for (var columnIndex = 0; columnIndex < columnCount; columnIndex++) {
    columnWidths.push(dataTable.getColumnLabel(columnIndex).length);
    columnPadRight.push(dataTable.getColumnType(columnIndex) == 'number');
  }
  for (var rowIndex = 0; rowIndex < rowCount; rowIndex++)
    for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
      columnWidths[columnIndex] = Math.max(columnWidths[columnIndex], dataTable.getFormattedValue(rowIndex, columnIndex).length);

  function pad(columnIndex, s) {
    var spaces = Array(columnWidths[columnIndex] - s.length + 1).join(' ');
    return columnPadRight[columnIndex] ? spaces + s : s + spaces;
  }

  // header
  for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
    s += pad(columnIndex, dataTable.getColumnLabel(columnIndex)) + "|";
  s += "\n|";

  // header line
  for (var columnIndex = 0; columnIndex < columnCount; columnIndex++) {
    if (columnPadRight[columnIndex])
      s += Array(columnWidths[columnIndex]).join("-") + ":|";
    else
      s += Array(columnWidths[columnIndex] + 1).join("-") + "|";
  }
  s += "\n";

  // contents
  for (var rowIndex = 0; rowIndex < rowCount; rowIndex++) {
    s += "|";
    for (var columnIndex = 0; columnIndex < columnCount; columnIndex++)
      s += pad(columnIndex, dataTable.getFormattedValue(rowIndex, columnIndex)) + "|";
    s += "\n";
  }

  return s;
}
</script>
<style type="text/css">
@media (min-width: 800px) {
  .container {
    max-width: 800px;
  }
}
textarea {
  font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
}
.tablechart {
  width: 700px;
  margin: auto;
  padding-top: 20px;
  padding-bottom: 20px;
}
.chart {
  padding-top: 20px;
  padding-bottom: 20px;
}
body { padding-top: 70px; }
</style>
</head>
<body>
<div class="container">
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="https://github.com/miloyip/itoa-benchmark"><span class="glyphicon glyphicon-home"></span> itoa-benchmark</a>
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown">Configuration <span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu" id="configuration">
          </ul>
        </li>
        <li class="dropdown">
          <a href="#" class="dropdown-toggle" data-toggle="dropdown">Section <span class="caret"></span></a>
          <ul class="dropdown-menu" role="menu" id="section">
          </ul>
        </li>
      </ul>
      <p class="navbar-text navbar-right">Developed by <a href="https://github.com/miloyip" class="navbar-link">Milo Yip</a></p>
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>
<div class="page-header">
<h1 id="title">corei7920@2.67_win64_vc2013</h1>
</div>
<div id="main"></div>
<h2>Source CSV</h2>
<textarea id="textInput" class="form-control" rows="5" readonly>
Type,Function,Digit,Time(ns)
u32toa_sequential,branchlut,1,5.344654
u32toa_sequential,branchlut,2,4.988343
u32toa_sequential,branchlut,3,4.988343
u32toa_sequential,branchlut,4,5.344654
u32toa_sequential,branchlut,5,8.926912
u32toa_sequential,branchlut,6,9.264066
u32toa_sequential,branchlut,7,9.758303
u32toa_sequential,branchlut,8,9.674014
u32toa_sequential,branchlut,9,12.934445
u32toa_sequential,branchlut,10,13.080034
u32toa_random,branchlut,0,17.769919
u32toa_sequential,count,1,6.992109
u32toa_sequential,count,2,9.808110
u32toa_sequential,count,3,12.838662
u32toa_sequential,count,4,15.555049
u32toa_sequential,count,5,18.654565
u32toa_sequential,count,6,21.317313
u32toa_sequential,count,7,24.060519
u32toa_sequential,count,8,30.539235
u32toa_sequential,count,9,31.585178
u32toa_sequential,count,10,34.171301
u32toa_random,count,0,31.770230
u32toa_sequential,countlut,1,4.727815
u32toa_sequential,countlut,2,4.988343
u32toa_sequential,countlut,3,7.482515
u32toa_sequential,countlut,4,7.861813
u32toa_sequential,countlut,5,9.827266
u32toa_sequential,countlut,6,10.574368
u32toa_sequential,countlut,7,12.505340
u32toa_sequential,countlut,8,12.516834
u32toa_sequential,countlut,9,14.325204
u32toa_sequential,countlut,10,14.451637
u32toa_random,countlut,0,19.839967
u32toa_sequential,lut,1,9.639533
u32toa_sequential,lut,2,11.666287
u32toa_sequential,lut,3,13.352056
u32toa_sequential,lut,4,15.451604
u32toa_sequential,lut,5,16.555016
u32toa_sequential,lut,6,18.612421
u32toa_sequential,lut,7,20.056818
u32toa_sequential,lut,8,21.807719
u32toa_sequential,lut,9,25.930190
u32toa_sequential,lut,10,25.026005
u32toa_random,lut,0,32.237647
u32toa_sequential,naive,1,10.704632
u32toa_sequential,naive,2,13.202635
u32toa_sequential,naive,3,17.509008
u32toa_sequential,naive,4,20.727294
u32toa_sequential,naive,5,25.612193
u32toa_sequential,naive,6,27.558489
u32toa_sequential,naive,7,31.133086
u32toa_sequential,naive,8,34.883921
u32toa_sequential,naive,9,39.320559
u32toa_sequential,naive,10,46.780086
u32toa_random,naive,0,40.104441
u32toa_sequential,null,1,2.137861
u32toa_sequential,null,2,2.137861
u32toa_sequential,null,3,2.137861
u32toa_sequential,null,4,2.137861
u32toa_sequential,null,5,2.137861
u32toa_sequential,null,6,2.137861
u32toa_sequential,null,7,2.137861
u32toa_sequential,null,8,2.137861
u32toa_sequential,null,9,3.061203
u32toa_sequential,null,10,2.137861
u32toa_random,null,0,2.142459
u32toa_sequential,sprintf,1,117.923363
u32toa_sequential,sprintf,2,131.244768
u32toa_sequential,sprintf,3,145.880307
u32toa_sequential,sprintf,4,166.684227
u32toa_sequential,sprintf,5,181.840821
u32toa_sequential,sprintf,6,200.334472
u32toa_sequential,sprintf,7,219.475611
u32toa_sequential,sprintf,8,238.264271
u32toa_sequential,sprintf,9,259.332550
u32toa_sequential,sprintf,10,281.270533
u32toa_random,sprintf,0,218.680235
u32toa_sequential,sse2,1,5.344654
u32toa_sequential,sse2,2,4.988343
u32toa_sequential,sse2,3,5.057307
u32toa_sequential,sse2,4,5.520893
u32toa_sequential,sse2,5,9.371342
u32toa_sequential,sse2,6,9.172115
u32toa_sequential,sse2,7,9.547582
u32toa_sequential,sse2,8,9.995843
u32toa_sequential,sse2,9,8.333062
u32toa_sequential,sse2,10,8.804311
u32toa_random,sse2,0,16.560380
u32toa_sequential,vc,1,13.198804
u32toa_sequential,vc,2,19.474462
u32toa_sequential,vc,3,28.221303
u32toa_sequential,vc,4,40.937364
u32toa_sequential,vc,5,53.128538
u32toa_sequential,vc,6,65.898237
u32toa_sequential,vc,7,78.242663
u32toa_sequential,vc,8,91.426141
u32toa_sequential,vc,9,105.770502
u32toa_sequential,vc,10,118.923330
u32toa_random,vc,0,82.295404
i32toa_sequential,branchlut,1,7.126205
i32toa_sequential,branchlut,2,6.413584
i32toa_sequential,branchlut,3,6.057274
i32toa_sequential,branchlut,4,6.413584
i32toa_sequential,branchlut,5,10.145263
i32toa_sequential,branchlut,6,10.225721
i32toa_sequential,branchlut,7,10.704632
i32toa_sequential,branchlut,8,10.436442
i32toa_sequential,branchlut,9,13.823305
i32toa_sequential,branchlut,10,13.616415
i32toa_random,branchlut,0,22.139892
i32toa_sequential,count,1,7.762199
i32toa_sequential,count,2,10.574368
i32toa_sequential,count,3,13.489982
i32toa_sequential,count,4,16.432415
i32toa_sequential,count,5,19.267572
i32toa_sequential,count,6,22.505014
i32toa_sequential,count,7,25.627518
i32toa_sequential,count,8,28.769178
i32toa_sequential,count,9,30.895546
i32toa_sequential,count,10,34.454817
i32toa_random,count,0,35.784658
i32toa_sequential,countlut,1,5.597519
i32toa_sequential,countlut,2,6.057274
i32toa_sequential,countlut,3,8.210461
i32toa_sequential,countlut,4,8.903925
i32toa_sequential,countlut,5,11.072436
i32toa_sequential,countlut,6,11.597323
i32toa_sequential,countlut,7,13.367381
i32toa_sequential,countlut,8,13.976556
i32toa_sequential,countlut,9,15.493748
i32toa_sequential,countlut,10,16.252344
i32toa_random,countlut,0,24.720651
i32toa_sequential,lut,1,10.704632
i32toa_sequential,lut,2,12.501509
i32toa_sequential,lut,3,14.267735
i32toa_sequential,lut,4,16.405596
i32toa_sequential,lut,5,17.474527
i32toa_sequential,lut,6,19.658364
i32toa_sequential,lut,7,20.738788
i32toa_sequential,lut,8,22.888143
i32toa_sequential,lut,9,24.497286
i32toa_sequential,lut,10,26.359295
i32toa_random,lut,0,36.250927
i32toa_sequential,naive,1,11.769732
i32toa_sequential,naive,2,14.309879
i32toa_sequential,naive,3,18.581770
i32toa_sequential,naive,4,21.819213
i32toa_sequential,naive,5,25.370821
i32toa_sequential,naive,6,28.577613
i32toa_sequential,naive,7,32.182860
i32toa_sequential,naive,8,39.887590
i32toa_sequential,naive,9,42.692096
i32toa_sequential,naive,10,46.167079
i32toa_random,naive,0,45.941799
i32toa_sequential,null,1,2.494172
i32toa_sequential,null,2,2.494172
i32toa_sequential,null,3,2.494172
i32toa_sequential,null,4,2.494172
i32toa_sequential,null,5,2.494172
i32toa_sequential,null,6,2.494172
i32toa_sequential,null,7,2.494172
i32toa_sequential,null,8,2.494172
i32toa_sequential,null,9,2.494172
i32toa_sequential,null,10,2.494172
i32toa_random,null,0,2.498003
i32toa_sequential,sprintf,1,117.597703
i32toa_sequential,sprintf,2,134.830858
i32toa_sequential,sprintf,3,146.761504
i32toa_sequential,sprintf,4,174.557534
i32toa_sequential,sprintf,5,197.415027
i32toa_sequential,sprintf,6,212.751692
i32toa_sequential,sprintf,7,232.084396
i32toa_sequential,sprintf,8,255.302030
i32toa_sequential,sprintf,9,276.653825
i32toa_sequential,sprintf,10,301.905877
i32toa_random,sprintf,0,229.840791
i32toa_sequential,sse2,1,7.126205
i32toa_sequential,sse2,2,6.413584
i32toa_sequential,sse2,3,6.145394
i32toa_sequential,sse2,4,6.363777
i32toa_sequential,sse2,5,9.957530
i32toa_sequential,sse2,6,10.359816
i32toa_sequential,sse2,7,10.658657
i32toa_sequential,sse2,8,10.624175
i32toa_sequential,sse2,9,9.018863
i32toa_sequential,sse2,10,9.444137
i32toa_random,sse2,0,20.817713
i32toa_sequential,vc,1,9.126140
i32toa_sequential,vc,2,11.922983
i32toa_sequential,vc,3,16.543523
i32toa_sequential,vc,4,23.263610
i32toa_sequential,vc,5,28.700215
i32toa_sequential,vc,6,37.573489
i32toa_sequential,vc,7,47.649789
i32toa_sequential,vc,8,59.009572
i32toa_sequential,vc,9,67.936485
i32toa_sequential,vc,10,80.472475
i32toa_random,vc,0,65.912413
u64toa_sequential,branchlut,1,5.344654
u64toa_sequential,branchlut,2,5.344654
u64toa_sequential,branchlut,3,5.700964
u64toa_sequential,branchlut,4,5.700964
u64toa_sequential,branchlut,5,8.911587
u64toa_sequential,branchlut,6,9.283223
u64toa_sequential,branchlut,7,9.639533
u64toa_sequential,branchlut,8,9.501606
u64toa_sequential,branchlut,9,20.654500
u64toa_sequential,branchlut,10,20.685150
u64toa_sequential,branchlut,11,21.792394
u64toa_sequential,branchlut,12,22.049090
u64toa_sequential,branchlut,13,22.673591
u64toa_sequential,branchlut,14,22.757880
u64toa_sequential,branchlut,15,23.566282
u64toa_sequential,branchlut,16,23.558620
u64toa_sequential,branchlut,17,34.159807
u64toa_sequential,branchlut,18,34.029543
u64toa_sequential,branchlut,19,33.581282
u64toa_sequential,branchlut,20,34.332215
u64toa_random,branchlut,0,31.174655
u64toa_sequential,count,1,7.482515
u64toa_sequential,count,2,11.670118
u64toa_sequential,count,3,15.125944
u64toa_sequential,count,4,18.842298
u64toa_sequential,count,5,22.543327
u64toa_sequential,count,6,28.523975
u64toa_sequential,count,7,33.979736
u64toa_sequential,count,8,38.278447
u64toa_sequential,count,9,41.040809
u64toa_sequential,count,10,44.856777
u64toa_sequential,count,11,51.998307
u64toa_sequential,count,12,56.427281
u64toa_sequential,count,13,59.492315
u64toa_sequential,count,14,65.718166
u64toa_sequential,count,15,71.618357
u64toa_sequential,count,16,77.618162
u64toa_sequential,count,17,78.116230
u64toa_sequential,count,18,82.775082
u64toa_sequential,count,19,93.265162
u64toa_sequential,count,20,95.219121
u64toa_random,count,0,62.732440
u64toa_sequential,countlut,1,5.421279
u64toa_sequential,countlut,2,6.057274
u64toa_sequential,countlut,3,8.551446
u64toa_sequential,countlut,4,8.697035
u64toa_sequential,countlut,5,10.474755
u64toa_sequential,countlut,6,10.861715
u64toa_sequential,countlut,7,21.485890
u64toa_sequential,countlut,8,12.988083
u64toa_sequential,countlut,9,18.643071
u64toa_sequential,countlut,10,19.478293
u64toa_sequential,countlut,11,21.068279
u64toa_sequential,countlut,12,21.930320
u64toa_sequential,countlut,13,22.914963
u64toa_sequential,countlut,14,23.803822
u64toa_sequential,countlut,15,26.068117
u64toa_sequential,countlut,16,26.432089
u64toa_sequential,countlut,17,31.385951
u64toa_sequential,countlut,18,32.975938
u64toa_sequential,countlut,19,31.983633
u64toa_sequential,countlut,20,33.182827
u64toa_random,countlut,0,31.793792
u64toa_sequential,lut,1,9.639533
u64toa_sequential,lut,2,11.072436
u64toa_sequential,lut,3,14.283060
u64toa_sequential,lut,4,15.715963
u64toa_sequential,lut,5,18.210135
u64toa_sequential,lut,6,20.382478
u64toa_sequential,lut,7,26.248187
u64toa_sequential,lut,8,28.646577
u64toa_sequential,lut,9,33.841810
u64toa_sequential,lut,10,35.431796
u64toa_sequential,lut,11,41.213217
u64toa_sequential,lut,12,42.527351
u64toa_sequential,lut,13,48.224483
u64toa_sequential,lut,14,52.726252
u64toa_sequential,lut,15,55.764467
u64toa_sequential,lut,16,59.867782
u64toa_sequential,lut,17,62.239352
u64toa_sequential,lut,18,65.120485
u64toa_sequential,lut,19,69.047560
u64toa_sequential,lut,20,71.986161
u64toa_random,lut,0,63.312689
u64toa_sequential,naive,1,11.060942
u64toa_sequential,naive,2,13.601090
u64toa_sequential,naive,3,17.842331
u64toa_sequential,naive,4,21.141074
u64toa_sequential,naive,5,26.336307
u64toa_sequential,naive,6,31.286337
u64toa_sequential,naive,7,38.079220
u64toa_sequential,naive,8,43.611607
u64toa_sequential,naive,9,49.676543
u64toa_sequential,naive,10,55.389001
u64toa_sequential,naive,11,60.407994
u64toa_sequential,naive,12,65.752648
u64toa_sequential,naive,13,70.771642
u64toa_sequential,naive,14,76.894048
u64toa_sequential,naive,15,81.552900
u64toa_sequential,naive,16,88.399420
u64toa_sequential,naive,17,93.123404
u64toa_sequential,naive,18,99.996743
u64toa_sequential,naive,19,102.575203
u64toa_sequential,naive,20,108.264673
u64toa_random,naive,0,81.499453
u64toa_sequential,null,1,2.494172
u64toa_sequential,null,2,2.494172
u64toa_sequential,null,3,2.494172
u64toa_sequential,null,4,2.494172
u64toa_sequential,null,5,2.494172
u64toa_sequential,null,6,2.494172
u64toa_sequential,null,7,2.494172
u64toa_sequential,null,8,2.494172
u64toa_sequential,null,9,2.494172
u64toa_sequential,null,10,2.494172
u64toa_sequential,null,11,2.494172
u64toa_sequential,null,12,2.494172
u64toa_sequential,null,13,2.494172
u64toa_sequential,null,14,2.494172
u64toa_sequential,null,15,2.494172
u64toa_sequential,null,16,2.494172
u64toa_sequential,null,17,2.494172
u64toa_sequential,null,18,2.494172
u64toa_sequential,null,19,2.494172
u64toa_sequential,null,20,2.494172
u64toa_random,null,0,2.498578
u64toa_sequential,sprintf,1,122.087978
u64toa_sequential,sprintf,2,135.520491
u64toa_sequential,sprintf,3,150.205836
u64toa_sequential,sprintf,4,168.415971
u64toa_sequential,sprintf,5,186.193170
u64toa_sequential,sprintf,6,204.660001
u64toa_sequential,sprintf,7,223.096183
u64toa_sequential,sprintf,8,242.804353
u64toa_sequential,sprintf,9,262.750064
u64toa_sequential,sprintf,10,282.872014
u64toa_sequential,sprintf,11,303.131890
u64toa_sequential,sprintf,12,323.211696
u64toa_sequential,sprintf,13,343.896846
u64toa_sequential,sprintf,14,363.903858
u64toa_sequential,sprintf,15,385.481699
u64toa_sequential,sprintf,16,406.802844
u64toa_sequential,sprintf,17,430.074116
u64toa_sequential,sprintf,18,452.529324
u64toa_sequential,sprintf,19,473.321750
u64toa_sequential,sprintf,20,498.508669
u64toa_random,sprintf,0,328.038742
u64toa_sequential,sse2,1,5.700964
u64toa_sequential,sse2,2,5.704795
u64toa_sequential,sse2,3,5.700964
u64toa_sequential,sse2,4,5.769927
u64toa_sequential,sse2,5,9.267897
u64toa_sequential,sse2,6,9.264066
u64toa_sequential,sse2,7,9.555244
u64toa_sequential,sse2,8,9.788953
u64toa_sequential,sse2,9,18.719697
u64toa_sequential,sse2,10,18.738853
u64toa_sequential,sse2,11,18.666059
u64toa_sequential,sse2,12,18.742685
u64toa_sequential,sse2,13,18.704372
u64toa_sequential,sse2,14,18.765672
u64toa_sequential,sse2,15,18.796323
u64toa_sequential,sse2,16,18.367218
u64toa_sequential,sse2,17,27.478032
u64toa_sequential,sse2,18,27.569983
u64toa_sequential,sse2,19,27.696416
u64toa_sequential,sse2,20,27.481864
u64toa_random,sse2,0,30.306101
u64toa_sequential,vc,1,13.198804
u64toa_sequential,vc,2,20.014674
u64toa_sequential,vc,3,28.029738
u64toa_sequential,vc,4,41.523552
u64toa_sequential,vc,5,52.963792
u64toa_sequential,vc,6,66.078308
u64toa_sequential,vc,7,78.185193
u64toa_sequential,vc,8,92.406952
u64toa_sequential,vc,9,105.318409
u64toa_sequential,vc,10,119.168533
u64toa_sequential,vc,11,133.493737
u64toa_sequential,vc,12,147.470293
u64toa_sequential,vc,13,161.044564
u64toa_sequential,vc,14,176.392723
u64toa_sequential,vc,15,191.740882
u64toa_sequential,vc,16,207.000921
u64toa_sequential,vc,17,221.743736
u64toa_sequential,vc,18,236.597659
u64toa_sequential,vc,19,253.708213
u64toa_sequential,vc,20,270.608045
u64toa_random,vc,0,157.318057
i64toa_sequential,branchlut,1,6.413584
i64toa_sequential,branchlut,2,6.057274
i64toa_sequential,branchlut,3,6.413584
i64toa_sequential,branchlut,4,6.769894
i64toa_sequential,branchlut,5,9.831097
i64toa_sequential,branchlut,6,10.018831
i64toa_sequential,branchlut,7,10.367478
i64toa_sequential,branchlut,8,10.352153
i64toa_sequential,branchlut,9,21.263675
i64toa_sequential,branchlut,10,21.991621
i64toa_sequential,branchlut,11,22.573977
i64toa_sequential,branchlut,12,22.872818
i64toa_sequential,branchlut,13,23.700378
i64toa_sequential,branchlut,14,23.857461
i64toa_sequential,branchlut,15,24.298059
i64toa_sequential,branchlut,16,24.470467
i64toa_sequential,branchlut,17,34.830283
i64toa_sequential,branchlut,18,34.654044
i64toa_sequential,branchlut,19,35.611867
i64toa_sequential,branchlut,20,35.546735
i64toa_random,branchlut,0,34.825686
i64toa_sequential,count,1,8.195135
i64toa_sequential,count,2,12.359751
i64toa_sequential,count,3,15.880709
i64toa_sequential,count,4,19.823109
i64toa_sequential,count,5,25.064318
i64toa_sequential,count,6,28.953080
i64toa_sequential,count,7,33.657908
i64toa_sequential,count,8,38.297603
i64toa_sequential,count,9,43.580956
i64toa_sequential,count,10,47.649789
i64toa_sequential,count,11,52.090258
i64toa_sequential,count,12,61.005676
i64toa_sequential,count,13,62.699108
i64toa_sequential,count,14,66.166428
i64toa_sequential,count,15,70.039865
i64toa_sequential,count,16,74.974570
i64toa_sequential,count,17,79.756023
i64toa_sequential,count,18,87.621667
i64toa_sequential,count,19,94.039083
i64toa_sequential,count,20,88.583322
i64toa_random,count,0,66.678480
i64toa_sequential,countlut,1,6.413584
i64toa_sequential,countlut,2,6.769894
i64toa_sequential,countlut,3,8.685541
i64toa_sequential,countlut,4,9.137633
i64toa_sequential,countlut,5,10.900028
i64toa_sequential,countlut,6,11.608817
i64toa_sequential,countlut,7,13.750510
i64toa_sequential,countlut,8,13.857786
i64toa_sequential,countlut,9,18.949574
i64toa_sequential,countlut,10,20.328840
i64toa_sequential,countlut,11,21.535697
i64toa_sequential,countlut,12,22.340269
i64toa_sequential,countlut,13,24.278903
i64toa_sequential,countlut,14,24.516443
i64toa_sequential,countlut,15,26.615991
i64toa_sequential,countlut,16,27.160035
i64toa_sequential,countlut,17,32.140716
i64toa_sequential,countlut,18,33.224972
i64toa_sequential,countlut,19,33.949086
i64toa_sequential,countlut,20,33.941423
i64toa_random,countlut,0,36.117981
i64toa_sequential,lut,1,10.708464
i64toa_sequential,lut,2,12.133704
i64toa_sequential,lut,3,15.336665
i64toa_sequential,lut,4,16.765738
i64toa_sequential,lut,5,19.294391
i64toa_sequential,lut,6,21.474396
i64toa_sequential,lut,7,27.052759
i64toa_sequential,lut,8,30.098637
i64toa_sequential,lut,9,34.914572
i64toa_sequential,lut,10,37.324455
i64toa_sequential,lut,11,42.646121
i64toa_sequential,lut,12,46.960156
i64toa_sequential,lut,13,49.584592
i64toa_sequential,lut,14,51.829730
i64toa_sequential,lut,15,57.856353
i64toa_sequential,lut,16,58.132206
i64toa_sequential,lut,17,64.078373
i64toa_sequential,lut,18,69.591603
i64toa_sequential,lut,19,71.775440
i64toa_sequential,lut,20,71.319516
i64toa_random,lut,0,67.440141
i64toa_sequential,naive,1,12.129873
i64toa_sequential,naive,2,15.428616
i64toa_sequential,naive,3,18.922755
i64toa_sequential,naive,4,22.738723
i64toa_sequential,naive,5,27.458876
i64toa_sequential,naive,6,33.175165
i64toa_sequential,naive,7,41.094447
i64toa_sequential,naive,8,46.757098
i64toa_sequential,naive,9,52.255003
i64toa_sequential,naive,10,56.641834
i64toa_sequential,naive,11,62.702939
i64toa_sequential,naive,12,68.626118
i64toa_sequential,naive,13,77.035805
i64toa_sequential,naive,14,78.315457
i64toa_sequential,naive,15,82.901515
i64toa_sequential,naive,16,89.445363
i64toa_sequential,naive,17,96.985347
i64toa_sequential,naive,18,102.732286
i64toa_sequential,naive,19,105.138338
i64toa_sequential,naive,20,104.640270
i64toa_random,naive,0,85.281897
i64toa_sequential,null,1,2.494172
i64toa_sequential,null,2,2.494172
i64toa_sequential,null,3,2.494172
i64toa_sequential,null,4,2.494172
i64toa_sequential,null,5,2.494172
i64toa_sequential,null,6,2.494172
i64toa_sequential,null,7,2.494172
i64toa_sequential,null,8,2.494172
i64toa_sequential,null,9,2.494172
i64toa_sequential,null,10,2.494172
i64toa_sequential,null,11,2.494172
i64toa_sequential,null,12,2.494172
i64toa_sequential,null,13,2.494172
i64toa_sequential,null,14,2.494172
i64toa_sequential,null,15,2.494172
i64toa_sequential,null,16,2.494172
i64toa_sequential,null,17,2.494172
i64toa_sequential,null,18,2.494172
i64toa_sequential,null,19,2.494172
i64toa_sequential,null,20,2.494172
i64toa_random,null,0,2.148589
i64toa_sequential,sprintf,1,124.884822
i64toa_sequential,sprintf,2,138.252203
i64toa_sequential,sprintf,3,153.178919
i64toa_sequential,sprintf,4,177.749001
i64toa_sequential,sprintf,5,201.047092
i64toa_sequential,sprintf,6,222.919943
i64toa_sequential,sprintf,7,243.179820
i64toa_sequential,sprintf,8,263.393721
i64toa_sequential,sprintf,9,282.622980
i64toa_sequential,sprintf,10,306.468946
i64toa_sequential,sprintf,11,323.951136
i64toa_sequential,sprintf,12,344.666936
i64toa_sequential,sprintf,13,364.405757
i64toa_sequential,sprintf,14,384.673296
i64toa_sequential,sprintf,15,405.557673
i64toa_sequential,sprintf,16,425.744755
i64toa_sequential,sprintf,17,451.264997
i64toa_sequential,sprintf,18,473.980732
i64toa_sequential,sprintf,19,497.504871
i64toa_sequential,sprintf,20,500.244245
i64toa_random,sprintf,0,336.916231
i64toa_sequential,sse2,1,6.769894
i64toa_sequential,sse2,2,6.413584
i64toa_sequential,sse2,3,6.593655
i64toa_sequential,sse2,4,6.620474
i64toa_sequential,sse2,5,10.175914
i64toa_sequential,sse2,6,10.413454
i64toa_sequential,sse2,7,10.352153
i64toa_sequential,sse2,8,10.704632
i64toa_sequential,sse2,9,19.639207
i64toa_sequential,sse2,10,19.646870
i64toa_sequential,sse2,11,19.639207
i64toa_sequential,sse2,12,19.627713
i64toa_sequential,sse2,13,19.635376
i64toa_sequential,sse2,14,19.643038
i64toa_sequential,sse2,15,19.616219
i64toa_sequential,sse2,16,19.267572
i64toa_sequential,sse2,17,28.033570
i64toa_sequential,sse2,18,28.562288
i64toa_sequential,sse2,19,28.286435
i64toa_sequential,sse2,20,28.317085
i64toa_random,sse2,0,33.787980
i64toa_sequential,vc,1,15.171920
i64toa_sequential,vc,2,24.114157
i64toa_sequential,vc,3,32.899312
i64toa_sequential,vc,4,46.078959
i64toa_sequential,vc,5,57.768234
i64toa_sequential,vc,6,79.146848
i64toa_sequential,vc,7,83.966614
i64toa_sequential,vc,8,96.391497
i64toa_sequential,vc,9,109.935117
i64toa_sequential,vc,10,123.348473
i64toa_sequential,vc,11,138.390129
i64toa_sequential,vc,12,153.343665
i64toa_sequential,vc,13,166.059726
i64toa_sequential,vc,14,180.745072
i64toa_sequential,vc,15,195.752246
i64toa_sequential,vc,16,211.100405
i64toa_sequential,vc,17,226.080760
i64toa_sequential,vc,18,241.812048
i64toa_sequential,vc,19,258.535642
i64toa_sequential,vc,20,262.443560
i64toa_random,vc,0,162.505436
</textarea>
</div>
<div class="row" id="downloadDD" style="display: none">
<div class="btn-group pull-right" >
    <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-picture"></span></button>
    <ul class="dropdown-menu">
        <li><a tabindex="-1" href="#" dltype="image/jpeg">JPEG</a></li>
        <li><a tabindex="-1" href="#" dltype="image/png">PNG</a></li>
        <li><a tabindex="-1" href="#" dltype="application/pdf">PDF</a></li>
        <li><a tabindex="-1" href="#" dltype="image/svg+xml">SVG</a></li>
    </ul>
</div>
</div>
<div class="row" id="showMD" style="display: none">
<div class="btn-group pull-right" >
    <button class="btn dropdown-toggle" data-toggle="collapse"><span class="glyphicon glyphicon-list-alt"></span></button>
</div>
<br/>
<br/>
<div class="collapse">
<textarea class="form-control" rows="5" readonly>
</textarea>
</div>
</div>
<form method="post" action="http://export.highcharts.com/" id="imageGetForm">
    <input type="hidden" name="filename" id="imageFilename" value="" />
    <input type="hidden" name="type" id="imageGetFormTYPE" value="" />
    <input type="hidden" name="width" value="900" />
    <input type="hidden" name="svg" value="" id="imageGetFormSVG" />
</form>
</div>
</body>
</html>